解答1[Java]:

class Solution {
    private static final char[] charMap = new char[256];
    static {
        for (int i = 0; i < 10; i++) {
            charMap[i + '0'] = (char) (1 + i); // numeric
        }
        for (int i = 0; i < 26; i++) {
            charMap[i + 'a'] = charMap[i + 'A'] = (char) (11 + i); // alphabetic, ignore cases
        }
    }

    public boolean isPalindrome(String s) {
        char[] pChars = s.toCharArray();
        int start = 0, end = pChars.length - 1;
        char cS, cE;
        while (start < end) {
            cS = charMap[pChars[start]];
            cE = charMap[pChars[end]];
            if (cS != 0 && cE != 0) {
                if (cS != cE)
                    return false;
                start++;
                end--;
            } else {
                if (cS == 0)
                    start++;
                if (cE == 0)
                    end--;
            }
        }
        return true;
    }
}

思路

先打一个表。注意通过 charMap['A'] 这种方式访问数组的时候,会自动把字符转换为 int 型。

解答2[Java]:

public class Solution {
    public boolean isPalindrome(String s) {
        String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
        String rev = new StringBuffer(actual).reverse().toString();
        return actual.equals(rev);
    }
}

使用正则表达式和 Java 的类库。

results matching ""

    No results matching ""